<?php

/**
 * [全功能映射模型]
 * 只要配置了映射表($this->_map)，则自动验证表和自动完成表均可使用映射后的字段名
 * 针对parseFieldsMap只能反射解析单行数据，特增加了parseFieldsMapMulti方法
 * Created by Tinico
 */
class AutoMapModel extends Model {

    public $_map_flip;//字段反射，可以在连贯查询中传入field()方法

    public function _initialize() {
    
        parent::_initialize();
        
        if(!empty($this->_map) && is_array($this->_map)) {
            //翻译自动验证字段名
            if(!empty($this->_validate) && is_array($this->_validate)) {
                $validateCount = count($this->_validate);
                for($i=0; $i < $validateCount; $i++) {
                    $key = $this->_validate[$i][0];
                    $this->_validate[$i][0] = strtr($key,$this->_map);
                }
            }
            //翻译自动完成字段名
            if(!empty($this->_auto) && is_array($this->_auto)) {
                $autoCount = count($this->_auto);
                for($i=0; $i < $autoCount; $i++) {
                    $key = $this->_auto[$i][0];
                    $this->_auto[$i][0] = strtr($key,$this->_map);
                }
            }
            //保存反转映射
            $this->_map_flip = array_flip($this->_map);
        }
    }
    
    //映射多行数据（通常是由select()查找的结果）
    public function parseFieldsMapMulti($data) {
        $ret = array();
        foreach($data as $row)
            $ret[] = parseFieldsMap($row);
        return $ret;
    }
}

?>